﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web;

namespace BO
{
    public class NoticiaBO
    {
        #region Contrutores
        public NoticiaBO()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        #endregion

        #region Leitores      
        public static Noticia Selecionar(int id)
        {
            try
            {
                var bco = new ModeloContainer();
                var obj = bco.Noticias.FirstOrDefault(f => f.id == id);
                if (obj == null) { throw new Exception("Noticia não encontrada!"); }
                return obj;
            }
            catch (Exception ex)
            {
                throw new Exception("Selecionar() - " + ex.Message.ToString());
            }
        }
        #endregion

        #region Modificadores
        public static Noticia Salvar(Noticia novoObjeto)
        {
            try
            {
                var bco = new ModeloContainer();
                // Faz o INSERT
                if (novoObjeto.id == 0)
                {
                    bco.Noticias.AddObject(novoObjeto);
                    bco.SaveChanges();
                }

                // Faz o UPDATE
                else
                {
                    var obj = bco.Noticias.FirstOrDefault(g => g.id == novoObjeto.id);

                    if (obj != null)
                    {
                        if (obj.dtPublicacao == null)
                            obj.dtPublicacao = novoObjeto.dtPublicacao;

                        obj.categoriaID = novoObjeto.categoriaID;
                        obj.resumo = novoObjeto.resumo;
                        obj.texto = novoObjeto.texto;
                        obj.titulo = novoObjeto.titulo;
                        obj.usuarioID = novoObjeto.usuarioID;                    

                        bco.SaveChanges();

                        return obj;
                    }
                }

                return novoObjeto;    
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message.ToString());
            }
        }
        public static void Excluir(int id)
        {
            try
            {
                var bco = new ModeloContainer();
                var obj = bco.Noticias.FirstOrDefault(x => x.id == id);
                if (obj != null)
                {
                    var vereadoresEnvolvidos = (from b in bco.NoticiaVereadors where b.noticiaID == obj.id select b).ToList();
                    var fotosEnvolvidas = (from a in bco.Fotoes where a.noticiaID == obj.id select a).ToList();

                    foreach (var item in vereadoresEnvolvidos)
                    {
                        bco.NoticiaVereadors.DeleteObject(item);
                    }
                    foreach (var item in fotosEnvolvidas)
                    {
                        File.Delete(HttpContext.Current.Server.MapPath("\\fotos\\noticia\\" + item.noticiaID + "\\" + item.urlFoto));
                        bco.Fotoes.DeleteObject(item);
                    }

                    vereadoresEnvolvidos = null;
                    fotosEnvolvidas = null;

                    bco.Noticias.DeleteObject(obj);
                    bco.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Excluir - " + ex.Message.ToString());
            }
        }
        #endregion
    }
}
